#pragma once
/*
 *
 * */
#include"logger.hpp"
namespace zxlog{
    Logger::ptr getLogger(const std::string& name)
    {
        return LoggerManager::getInstance().getLogger(name);
    }

    Logger::ptr rootLogger()
    {
        return LoggerManager::getInstance().rootLogger();
    }

#define debug(fmt,...) debug(__FILE__,__LINE__,fmt,#__VA_ARGS__)
#define info(fmt,...) info(__FILE__,__LINE__,fmt,#__VA_ARGS__)
#define warn(fmt,...) warn(__FILE__,__LINE__,fmt,#__VA_ARGS__)
#define error(fmt,...) error(__FILE__,__LINE__,fmt,#__VA_ARGS__)
#define fatal(fmt,...) fatal(__FILE__,__LINE__,fmt,#__VA_ARGS__)

#define DEBUG(logger,fmt,...) (logger)->debug(fmt,...)
#define INFO(logger,fmt,...) (logger)->info(fmt,...)
#define WARN(logger,fmt,...) (logger)->warn(fmt,...)
#define ERROR(logger,fmt,...) (logger)->error(fmt,...)
#define FATAL(logger,fmt,...) (logger)->fatal(fmt,...)

#define LOGD(fmt,...) DEBUG(zxlog::rootLogger(),fmt,#__VA_ARGS__)
#define LOGI(fmt,...) INFO(zxlog::rootLogger(),fmt,#__VA_ARGS__)
#define LOGW(fmt,...) WARN(zxlog::rootLogger(),fmt,#__VA_ARGS__)
#define LOGE(fmt,...) ERROR(zxlog::rootLogger(),fmt,#__VA_ARGS__)
#define LOGF(fmt,...) FATAL(zxlog::rootLogger(),fmt,#__VA_ARGS__)
}

